# Módulo Gráficos

### Práctica guiada

## Gráfico de barras con variables numéricas

### Supongamos que queremos comparar la media del ingreso por la ocupación principal de las y los asalariados según la condición de registro.

1. Cargo las librerías con las que voy a trabajar:

    library(eph)
    library(tidyverse)
    library(questionr)
    library(ggthemes)

2. Descargamos la base de datos con la que vamos a trabajar:

    base <- get_microdata(year = 2018, trimester = 4, type = "individual")

3. Estructuramos la base para obtener la información que queremos visualizar:

    medias <- base %>%
      filter(ESTADO == 1, CAT_OCUP == 3) %>%
      mutate(condicion_registro = factor(PP07H,
                                         levels = c(1, 2),
                                         labels = c( "Registrado", "No registrado"))) %>%
      group_by(condicion_registro) %>%
      summarise(media = wtd.mean(P21))

4. Graficamos

    medias %>%
      ggplot(aes(x = condicion_registro,
                 y = media,
                 fill = condicion_registro)) +
      geom_bar(stat = "identity") +
      geom_text(aes(label = round(media, 1)),
                vjust = 1) +
      labs(title = "Media del ingreso de la ocupación principal de la \n población asalariada por condición de registro. Total aglomerados",
           x = "Condición de registro",
           y = "Media del ingreso de la Ocup. Principal",
           caption = "Fuente: Elaboración propia en base a la EPH-INDEC") +
      theme_clean()

      #ggsave(filename = "barras_media.png", width = 6, height = 5)

- Con `labs` agregamos las etiquetas al gráfico (título, subtítulo, nombre de los ejes, notas al pie, etc.).

  - Con `\n` podemos “partir” el título tantas veces como querramos.

Con `geom_text()` agregamos las etiquetas de los valores que toma la variable en el gráfico

## Gráfico de barras para variables categóricas

- Intentemos graficar cómo se distribuye la población en función del nivel educativo de las personas y el sexo:

- Al ser ambas variables cualitativas, tendremos que estructura la base en fución:

    base_graf <- base %>%
      mutate(nivel_educativo = factor(NIVEL_ED,
                                      levels = c(7, 1:6),
                                      labels = c("Sin instrucción", "Primaria incompleta",
                                                 "Primaria completa", "Secundaria incompleta",
                                                 "Secundaria completa", "Superior incompleta",
                                                 "Superior completa")),
             sexo               = factor(CH04,
                                         levels = c(1, 2),
                                         labels = c("Varón", "Mujer"))) %>%
      select(nivel_educativo, sexo, PONDERA)

## Parámetro de posición (`position = ""`)

position = “stack”

- Posiciona de forma apilada cada una de las categorías, acumulando cantidades.

    ggplot(data = base_graf) +
      geom_bar(aes(x = nivel_educativo,
                   fill = sexo),
               position = "stack")

### - position = “fill”

- Posiciona de forma apilada cada una de las categorías, con límites de 0 a 1 (para comparación de proporciones)

    ggplot(data = base_graf) +
      geom_bar(aes(x = nivel_educativo,
                   fill = sexo),
               position = "fill")

### - position = “dodge”

- Posiona de forma vertical las barras en función de las categorías

    ggplot(data = base_graf) +
      geom_bar(aes(x = nivel_educativo,
                   fill = sexo),
               position = "dodge")

### ¿Y si invertimos el análisis?

### position = “stack”

- Posiciona de forma apilada cada una de las categorías, acumulando cantidades.

    ggplot(data = base_graf) +
      geom_bar(aes(x = sexo,
                   fill = nivel_educativo),
               position = "stack")

### position = “fill”

- Posiciona de forma apilada cada una de las categorías, con límites de 0 a 1 (para comparación de proporciones)

    ggplot(data = base_graf) +
      geom_bar(aes(x = sexo,
                   fill = nivel_educativo),
               position = "fill")

### position = “dodge”

- Posiona de forma vertical las barras en función de las categorías

    ggplot(data = base_graf) +
      geom_bar(aes(x = sexo,
                   fill = nivel_educativo),
               position = "dodge")

### _En el mismo gráfico podemos ir editando algo del estilo:

Con `scale_fill_viridis_d` cambiamos la paleta de colores a la escala “viridis”, diseñada por expertos en visualización de la información, pensada para lucir bien y poder ser leída incluso por gente con daltonismo.

    base_graf2 <- base_graf %>%
      calculate_tabulates("sexo", "nivel_educativo", weights = "PONDERA") %>%
      gather(key = nivel_educativo, value = poblacion, 2:8) %>%
      rename(sexo = `sexo/nivel_educativo`) %>%
      group_by(sexo) %>%
      mutate(pob_porcentaje = poblacion / sum(poblacion)*100)

    sum(base_graf2$pob_porcentaje[base_graf2$sexo=="Varón"])

    ## [1] 100

    ggplot(data = base_graf2) +
      geom_bar(aes(x = sexo,
                   y = pob_porcentaje,
                   fill = nivel_educativo),
               position = "dodge",
               stat     = "identity") +
      geom_text(aes(x = sexo,
                    y = pob_porcentaje,
                    group = nivel_educativo,
                    label = paste0(round(pob_porcentaje,1), "%")),
                position=position_dodge(width=0.9),
                vjust = -0.5,
                size = 3) +
      scale_fill_viridis_d() +
      labs(title = "Distribución porcentual de la población por sexo según el \n máximo nivel educativo. Total Aglomerados. Trimestre 4, año 2018",
           x = "Sexo",
           y = "Máximo nivel educativo alcanzado",
           caption = "Fuente: Elaboración propia en base a la EPH-INDEC")

- Posiciona de forma apilada cada una de las categorías, con límites de 0 a 1 (para comparación de proporciones). Agregamos etiquetas y estilo.

    ggplot(data = base_graf2) +
      geom_bar(aes(x = sexo,
                   y = pob_porcentaje,
                   fill = nivel_educativo),
               position = "fill",
               stat = "identity") +
      geom_text(aes(x = sexo,
                   y = pob_porcentaje,
                   group = nivel_educativo,
                   label = paste0(round(pob_porcentaje,1), "%")),
               position = "fill",
               vjust = 2.5,
               size = 5) +
      scale_fill_viridis_d() +
      labs(title = "Distribución porcentual de la población por sexo según el \n máximo nivel educativo. Total Aglomerados. Trimestre 4, año 2018",
           x = "Sexo",
           y = "Máximo nivel educativo alcanzado",
           caption = "Fuente: Elaboración propia en base a la EPH-INDEC")

### Hacer un gráfico de lineas, evolución en el tiempo.

Bajo varias bases para construir una serie de tiempo:

    library(eph)
    library(tidyverse)
    base2018t1 <- get_microdata(year = 2018, trimester = 1, type = "individual")
    base2018t2 <- get_microdata(year = 2018, trimester = 2, type = "individual")
    base2018t3 <- get_microdata(year = 2018, trimester = 3, type = "individual")
    base2018t4 <- get_microdata(year = 2018, trimester = 4, type = "individual")

Fusiono bases:

    base_tot <- rbind(base2018t1, base2018t2, base2018t3, base2018t4) %>%
      mutate(periodo = paste0(ANO4, "t", TRIMESTRE))

    # Chequeo fusión y armado de variable `periodo`
    table(base_tot$periodo)

    ##
    ## 2018t1 2018t2 2018t3 2018t4
    ##  57951  57835  56879  57418

Armo tabla con datos para tasa de no registro de la población asalariada en el tiempo

    tabulado <- base_tot %>%
      filter(ESTADO == 1, CAT_OCUP == 3) %>%
      group_by(periodo, CH04) %>%
      summarise(poblacion_no_registrada = sum(PONDERA[PP07H==2]),
                tasa                    = poblacion_no_registrada / sum(PONDERA) * 100) %>%
      select(-poblacion_no_registrada)
    tabulado

    ## # A tibble: 8 x 3
    ## # Groups:   periodo [4]
    ##   periodo  CH04  tasa
    ##   <chr>   <int> <dbl>
    ## 1 2018t1      1  31.9
    ## 2 2018t1      2  36.4
    ## 3 2018t2      1  31.9
    ## 4 2018t2      2  37.1
    ## 5 2018t3      1  32.1
    ## 6 2018t3      2  37.0
    ## 7 2018t4      1  32.9
    ## 8 2018t4      2  38.1

Graficamos:

    ggplot(tabulado) +
      aes(x = periodo,
          y = tasa,
          group = factor(CH04),
          fill = factor(CH04),
          label = round(tasa,1)) +
      geom_point() +
      geom_line(aes(color = factor(CH04))) +
      scale_y_continuous(limits = c(30, 40)) +
      geom_text(vjust = -1) +
      labs(title = "Tasa de no registro para asalariados/as por sexo. Total aglomerados. \n Trimestres 1, 2, 3 y 4 del año 2018",
           x = "Año y trimestre",
           y = "Tasa de no registro",
           caption = "Fuente: Elaboración propia en base a la EPH-INDEC")